package br.unicamp.ic.inf300.arena.modelo.logistico;
/**
 * Venda de Bilhetes Eletronicos para Espetaculos (Arena Entretenimento S.A.)
 * AgendaArtistica.java
 */

import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;

/**
 * Agenda artistica elaborada para um determinado periodo e unidade de negocio.
 * 
 */
public class AgendaArtistica {
	private int codAgenda;
	private Date dataInicio;
	private Date dataTermino;
	public Collection<Evento> eventos;
	public UnidadeNegocio unidadeNegocio;

	//--
	public AgendaArtistica() {}

	/**
	 * 
	 * @param dataInicio
	 * @param dataTermino
	 * @param unidadeNegocio
	 */
	public AgendaArtistica(Date dataInicio, Date dataTermino,
			UnidadeNegocio unidadeNegocio) {
		super();
		this.dataInicio = dataInicio;
		this.dataTermino = dataTermino;
		this.unidadeNegocio = unidadeNegocio;
		this.eventos = new ArrayList<Evento>();
	}

	/**
	 * 
	 * @param dataInicio
	 * @param dataTermino
	 * @param unidadeNegocio
	 * @param eventos
	 */
	public AgendaArtistica(Date dataInicio, Date dataTermino,
			UnidadeNegocio unidadeNegocio, Collection<Evento> eventos) {
		super();
		this.dataInicio = dataInicio;
		this.dataTermino = dataTermino;
		this.unidadeNegocio = unidadeNegocio;
		this.eventos = eventos;
	}

	public Collection<Evento> getEventos() {
		return this.eventos;
	}

	public void setEventos(Collection<Evento> eventos) {
		this.eventos = eventos;
	}

	/**
	 * Adiciona novo Evento para Agenda Artistica
	 * @param evento
	 * void
	 */
	public void addNovoEvento(Evento evento) {
		this.eventos.add(evento);
	}

	public Date getDataInicio() {
		return dataInicio;
	}

	public void setDataInicio(Date dataInicio) {
		this.dataInicio = dataInicio;
	}

	public Date getDataTermino() {
		return dataTermino;
	}

	public void setDataTermino(Date dataTermino) {
		this.dataTermino = dataTermino;
	}

	public UnidadeNegocio getUnidadeNegocio() {
		return unidadeNegocio;
	}

	public void setUnidadeNegocio(UnidadeNegocio unidadeNegocio) {
		this.unidadeNegocio = unidadeNegocio;
	}

	public int getCodAgenda() {
		return codAgenda;
	}

	public void setCodAgenda(int codAgenda) {
		this.codAgenda = codAgenda;
	}

	/**
	 * @return <code>String</code>
	 * JUtils plugin ;-)
	 */
	public String toString()
	{
	    final String TAB = "    ";
	    
	    StringBuffer retValue = new StringBuffer();
	    
	    retValue.append("AgendaArtistica ( ")
	        .append(super.toString()).append(TAB)
	        .append("codAgenda = ").append(this.codAgenda).append(TAB)
	        .append("dataInicio = ").append(this.dataInicio).append(TAB)
	        .append("dataTermino = ").append(this.dataTermino).append(TAB)
	        .append("eventos = ").append(this.eventos).append(TAB)
	        .append("unidadeNegocio = ").append(this.unidadeNegocio).append(TAB)
	        .append(" )");
	    
	    return retValue.toString();
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + codAgenda;
		result = prime * result
				+ ((dataInicio == null) ? 0 : dataInicio.hashCode());
		result = prime * result
				+ ((dataTermino == null) ? 0 : dataTermino.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		final AgendaArtistica other = (AgendaArtistica) obj;
		if (codAgenda != other.codAgenda)
			return false;
		if (dataInicio == null) {
			if (other.dataInicio != null)
				return false;
		} else if (!dataInicio.equals(other.dataInicio))
			return false;
		if (dataTermino == null) {
			if (other.dataTermino != null)
				return false;
		} else if (!dataTermino.equals(other.dataTermino))
			return false;
		return true;
	}
	
}